package com.inter.law.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Map;

import org.apache.struts2.ServletActionContext;

import net.sf.json.JSONObject;

import com.inter.law.utils.PathUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;


public class AjaxUploadProtocol extends ActionSupport {
	// 从前台得到了file后，Struts2会自动根据file得到它的文件类型和文件名
	// 文件类型和文件名必须按照严格的规则才可以得到
	private File file;
	private String fileContentType;
	private String fileFileName;
	private String json;
	private JSONObject jsonObject=new JSONObject();
	private Map<String,Object> session=ActionContext.getContext().getSession();

	//上传文件并检查是否重名
	@Override
	public String execute() throws Exception {
		
		try{
			saveFile();
			session.put("protocolFileName", this.getFileFileName());
			jsonObject.put("code", "success");
		}catch (Exception e){
			jsonObject.put("code", "fail");
		}
		json=jsonObject.toString();
		return SUCCESS;
	}
	
	//保存文件到用户的临时目录
	public void saveFile() throws Exception{
		//基于file创建一个文件输入流  
        InputStream is = new FileInputStream(file);  
        String username=(String) session.get("username");
        // 设置上传文件目录：用户（律师）对应的临时目录
        String uploadPath = PathUtils.PATH+"/"+username+"/temp";
        File path=new File(uploadPath);
        if(!path.exists()){
        	path.mkdirs();
        }
        // 设置目标文件  
        File toFile = new File(uploadPath, this.getFileFileName());  
        if(!toFile.exists()){
//        	try{
        		toFile.createNewFile();
//        	}catch (Exception e) {
//				// TODO: handle exception
//			}
        }
        
        // 创建一个输出流  
        OutputStream os = new FileOutputStream(toFile);  
  
        //设置缓存 ，设置大小为20M，表示最大可以读取20M的文件
        byte[] buffer = new byte[1024*1024*20];  
  
        int length = 0;  
  
        //读取file文件输出到toFile文件中  
        while ((length = is.read(buffer)) > 0) {  
            os.write(buffer, 0, length);  
        }  
       
        //关闭输入流  
        is.close();  
          
        //关闭输出流  
        os.close();  
	}

	public File getFile() {
		return file;
	}

	public void setFile(File file) {
		this.file = file;
	}

	public String getFileContentType() {
		return fileContentType;
	}

	public void setFileContentType(String fileContentType) {
		this.fileContentType = fileContentType;
	}

	public String getFileFileName() {
		return fileFileName;
	}

	public void setFileFileName(String fileFileName) {
		this.fileFileName = fileFileName;
	}

	public String getJson() {
		return json;
	}

	public void setJson(String json) {
		this.json = json;
	}
	

}
